package com.group.nepg.controller;
import com.group.common.users.NEPGUser;
import com.group.common.utils.MyUtils;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import java.util.ArrayList;
import java.util.regex.Pattern;

public class UserLoginViewController {

    @FXML private TextField username;       // 用户名输入框
    @FXML private PasswordField password;   // 密码输入框
    @FXML private Label errorLabel;         // 错误提示标签
    @FXML private ImageView imageView;     //背景图
    @FXML private AnchorPane root;

    // 网格员登陆编码  限制为字母、数字和下划线，长度4-20
    private static final Pattern USERNAME_PATTERN = Pattern.compile("[a-zA-Z0-9_]{4,20}");


    public void initialize() {
        if (errorLabel != null) {
            errorLabel.setVisible(false);
        }
        // 初始化图片
        initializeImage();
        // 添加输入验证
        setupInputValidation();
    }


    //给页面加个网格员背景图

    @FXML
    public void initializeImage() {
        try {

            Image image = new Image(getClass().getResourceAsStream("../image/grid.png"));
            imageView.setImage(image);
            imageView.fitWidthProperty().bind(root.widthProperty());
            imageView.fitHeightProperty().bind(root.heightProperty());
            imageView.setPreserveRatio(false);
            imageView.setSmooth(true);
        } catch (Exception e) {
            System.err.println("加载图片失败: " + e.getMessage());
            e.printStackTrace();
        }
    }

     //设置输入验证
    private void setupInputValidation() {
        // 用户名验证
        username.textProperty().addListener((observable, oldValue, newValue) -> {
            if (!isValidUsername(newValue)) {
                showError("用户名格式不正确（4-20位字母、数字或下划线）");
            } else {
                hideError();
            }
        });

        // 密码验证
        password.textProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue.isEmpty()) {
                showError("密码不能为空");
            } else {
                hideError();
            }
        });
    }


     //验证用户名格式
    private boolean isValidUsername(String username) {
        return USERNAME_PATTERN.matcher(username).matches();
    }


     // 显示错误提示
    private void showError(String message) {
        if (errorLabel != null) {
            errorLabel.setText(message);
            errorLabel.setVisible(true);
        }
    }


     // 隐藏错误提示
    private void hideError() {
        if (errorLabel != null) {
            errorLabel.setVisible(false);
        }
    }


     //处理登录按钮点击事件

    public void login(ActionEvent event) {
        String usernameText = username.getText().trim();
        String passwordText = password.getText();

        // 验证输入
        if (!validateInputs(usernameText, passwordText)) {
            return;
        }

        // 创建用户对象
        NEPGUser user = new NEPGUser(usernameText, passwordText);

        // 验证登录信息
        if (!checkLogin(user)) {
            handleLoginFailure();
            return;
        }

        // 登录成功处理
        handleLoginSuccess(user);

        // 导航到数据检测页面
        MyUtils.navigateToView(event, "group/nepg/view/DataDetectionView.fxml");
    }


     // 验证输入有效性

    private boolean validateInputs(String username, String password) {
        if (username.isEmpty()) {
            showError("用户名不能为空");
            return false;
        }

        if (!isValidUsername(username)) {
            showError("用户名格式不正确（4-20位字母、数字或下划线）");
            return false;
        }

        if (password.isEmpty()) {
            showError("密码不能为空");
            return false;
        }
        return true;
    }

     //处理登录失败情况

    private void handleLoginFailure() {
        MyUtils.showAlert("登录失败", "用户名或密码错误", "请重新输入", AlertType.ERROR);
        username.clear();
        password.clear();
        username.requestFocus();
    }


     // 处理登录成功情况

    private void handleLoginSuccess(NEPGUser user) {
        MyUtils.showAlert("用户登录", "登录成功", "欢迎您，" + user.getUsername() + "！", AlertType.INFORMATION);
        DataDetectionController.setUser(user);
        MeasurementController.setUser(user);
        System.out.println("[登录成功] 用户: " + user.getUsername() + ", 时间: " + java.time.LocalDateTime.now());

    }

     // 静态方法：验证用户登录信息

    public static boolean checkLogin(NEPGUser user) {
        ArrayList<NEPGUser> users = MyUtils.readFileToArrayList("group/data/nepg_userdata_arraylist.dat");

        for (NEPGUser u : users) {
            if (u.getUsername().equals(user.getUsername()) && u.getPassword().equals(user.getPassword())) {
                return true;
            }
        }
        return false;
    }}


